Ext.onReady(function(){

    //Para semestres traer desde 1 o 2, hasta el mayor de la tabla materia por carreras
    var years = [];
    var semesters = [];
    var secciones = ['A','B','C','D','E','F','G'];

    var today = new Date();
    currYear  = today.getFullYear();
    currMonth = today.getMonth();

    currSem = 1;
    if(currMonth > 6)
        currSem = 2;

    /*y = 2010
    while (y<=currYear){
        years.push([y]);
        y++;
    }*/
    
    years.push([currYear]);
    years.push([currYear-1]);
    years.push([currYear+1]);

    s = 1;
    while (s<=12){
        semesters.push([s]);
        s++;
    }
    semesters.push(['libre'])

    var h_obtener_success = function(obj){
        X.load('storeMateria', obj);
        X.get('facultad').disable();
        X.get('carrera').disable();
        X.get('anho').disable();
        X.get('seccion').disable();
        X.get('semestreanho').disable();
        X.get('semestre').disable();
        X.get('cargar').enable();
        X.get('cambiar').enable();
        X.get('agregar').enable();
        X.get('aceptar').disable();
        X.get('materiaWindow').show();
    }

    var h_cargar_success = function(obj){
        window.location = '/horario'
    }
    var h_horasfailure =function(){
            X.focus('agregar');
        };
    
    var h_confirmar = function(row){
        
        var respA=  X.store({
            fields : [ 'materia','profesor','categoria','marca' ]
        });
        var matA= X.store({
            fields : [ 'materia','aula','dia','inicio','fin','horas' ]
        });
    
        var mat = row.get('materia');
        var storeM = X.get('storeDetallePrincipal');
        var storeR = X.get('storeResponsablePrincipal');
        var indexes = new Array();
        var indexes2 = new Array();
        var i= 0;
        var i2= 0;
        for (var n=0;n<storeM.getCount();n++){
            if(storeM.getAt(n).get('materia')!=mat){
                var defaultData = {
                    materia:storeM.getAt(n).get('materia'),
                    aula:storeM.getAt(n).get('aula'),
                    dia:storeM.getAt(n).get('dia'),
                    inicio:storeM.getAt(n).get('inicio'),
                    fin:storeM.getAt(n).get('fin'),
                    horas:storeM.getAt(n).get('horas')
                };
                var p = new matA.recordType(defaultData);
                matA.add(p);
            }
        }
        for (n=0;n<storeR.getCount();n++){
            if(storeR.getAt(n).get('materia')!=mat){
                defaultData = {
                    materia:storeR.getAt(n).get('materia'),
                    profesor:storeR.getAt(n).get('profesor'),
                    categoria:storeR.getAt(n).get('categoria'),
                    marca:storeR.getAt(n).get('marca')
                };
                p = new respA.recordType(defaultData);
                respA.add(p);
            }
        }
        
        storeM.removeAll();
        storeR.removeAll();
        var gridR = X.get('responsablesPrincipalGrid');
        gridR.stopEditing();
        for (n=0;n<matA.getCount();n++){
            defaultData = {
                materia:matA.getAt(n).get('materia'),
                aula:matA.getAt(n).get('aula'),
                dia:matA.getAt(n).get('dia'),
                inicio:matA.getAt(n).get('inicio'),
                fin:matA.getAt(n).get('fin'),
                horas:matA.getAt(n).get('horas')
            };
            p = new storeM.recordType(defaultData);
            storeM.add(p);

        }
        for (n=0;n<respA.getCount();n++){
            defaultData = {
                materia:respA.getAt(n).get('materia'),
                profesor:respA.getAt(n).get('profesor'),
                categoria:respA.getAt(n).get('categoria'),
                marca:respA.getAt(n).get('marca')
            };
            p = new gridR.store.recordType(defaultData);
            gridR.store.add(p);
        }

        var gridP=X.get('materiasPrincipalGrid');
        var ind = gridP.store.find('materia',mat);
        gridP.store.removeAt(ind);

        if (ind < gridP.store.getCount()){
            gridP.getSelectionModel().selectRow(ind);
        }
        else{
            gridP.getSelectionModel().selectRow(ind-1);
        }
        matA.removeAll();
        respA.removeAll();
    }


    var h_eliminar = function(row){
        var storeL=X.get('storeMateria');
        var i=storeL.find('idCarreraMateria', row.get('materia'));
        var name=storeL.getAt(i).get('nombre');
        X.msg.confirm('Está seguro de eliminar la materia "'+name+'"?',X.call(h_confirmar, row));
    }


    var h_editar = function(row){
        var respA=  X.store({
            fields : [ 'materia','profesor','categoria','marca' ]
        });
        var matA= X.store({
            fields : [ 'materia','aula','dia','inicio','fin','horas' ]
        });
        var mat = row.get('materia');
        var storeM = X.get('storeDetallePrincipal');
        var storeR = X.get('storeResponsablePrincipal');
        var storeMa = X.get('storeDetalle');
        var storeRe = X.get('storeResponsable');
        for (var n=0;n<storeM.getCount();n++){
            if(storeM.getAt(n).get('materia')!=mat){
                //Aca se carga el store matA que sirve para recargar el principal
                var defaultData = {
                    materia:storeM.getAt(n).get('materia'),
                    aula:storeM.getAt(n).get('aula'),
                    dia:storeM.getAt(n).get('dia'),
                    inicio:storeM.getAt(n).get('inicio'),
                    fin:storeM.getAt(n).get('fin'),
                    horas:storeM.getAt(n).get('horas')
                };
                var p = new matA.recordType(defaultData);
                matA.add(p);
            }else{
               // alert(storeM.getAt(n).get('inicio')+' '+storeM.getAt(n).get('fin')+' '+typeof storeM.getAt(n).get('inicio')+' '+typeof storeM.getAt(n).get('fin'));
                defaultData = {
                    materia:storeM.getAt(n).get('materia'),
                    aula:storeM.getAt(n).get('aula'),
                    dia:storeM.getAt(n).get('dia'),
                    inicio:storeM.getAt(n).get('inicio'),
                    fin:storeM.getAt(n).get('fin'),
                    horas:storeM.getAt(n).get('horas')
                };
                p = new storeMa.recordType(defaultData);
                storeMa.add(p);
            }
        }
        for (n=0;n<storeR.getCount();n++){
            if(storeR.getAt(n).get('materia')!=mat){
                //Aca se carga el store respA que sirve para el principal
                defaultData = {
                    materia:storeR.getAt(n).get('materia'),
                    profesor:storeR.getAt(n).get('profesor'),
                    categoria:storeR.getAt(n).get('categoria'),
                    marca:storeR.getAt(n).get('marca')
                };
                p = new respA.recordType(defaultData);
                respA.add(p);
            }else{
                //Aca se carga el store storeRe que sirve para editar
                defaultData = {
                    materia:storeR.getAt(n).get('materia'),
                    profesor:storeR.getAt(n).get('profesor'),
                    categoria:storeR.getAt(n).get('categoria'),
                    marca:storeR.getAt(n).get('marca')
                };
                p = new storeRe.recordType(defaultData);
                storeRe.add(p);
            }
        }
        storeM.removeAll();
        storeR.removeAll(); 
        for (n=0;n<matA.getCount();n++){
            defaultData = {
                materia:matA.getAt(n).get('materia'),
                aula:matA.getAt(n).get('aula'),
                dia:matA.getAt(n).get('dia'),
                inicio:matA.getAt(n).get('inicio'),
                fin:matA.getAt(n).get('fin'),
                horas:matA.getAt(n).get('horas')
            };
            p = new storeM.recordType(defaultData);
            storeM.add(p);
        }
        var gridR = X.get('responsablesPrincipalGrid');
        gridR.stopEditing();
        for (n=0;n<respA.getCount();n++){
            defaultData = {
                materia:respA.getAt(n).get('materia'),
                profesor:respA.getAt(n).get('profesor'),
                categoria:respA.getAt(n).get('categoria'),
                marca:respA.getAt(n).get('marca')
            };
            p = new gridR.store.recordType(defaultData);
            gridR.store.add(p);
        }
        var gridMaterias= X.get('materiasGrid');
        var gridResp= X.get('responsablesGrid');
        var gridP=X.get('materiasPrincipalGrid');
        var ind = gridP.store.find('materia',mat);
        gridP.store.removeAt(ind);
        X.get('materiaMateria').setValue(mat);
        X.get('materiaWindow').show();
    }

    
    
    var h_empty_facultad = function(){
        X.focus('facultad');
    }
    var h_empty_carrera  = function(){
        X.focus('carrera');
    }
    var h_empty_anho     = function(){
        X.focus('anho');
    }
    var h_empty_seccion  = function(){
        X.focus('seccion');
    }
    var h_empty_semanho  = function(){
        X.focus('semestreanho');
    }
    var h_empty_semestre = function(){
        X.focus('semestre');
    }

    var columnRenderer = function(value){
        var combo = this.editor
        var r = combo.findRecord(combo.valueField, value);
        return r ? r.get(combo.displayField) : combo.valueNotFoundText;
    }

    X.sStore({
        id     : 'yearStore',
        fields : ['years'],
        data   : years
    });

    X.sStore({
        id     : 'semStore',
        fields : ['semesters'],
        data   : semesters
    });

    X.sStore({
        id     : 'yearSemStore',
        fields : ['yearSemester'],
        data   : ['1','2']
    });

    X.sStore({
        id     : 'secStore',
        fields : ['seccion'],
        data   : secciones
    });
    X.store({
        id     : 'storeResponsablePrincipal',
        fields : [ 'materia','profesor','categoria','marca' ]
    });
    X.store({
        id     : 'storeDetallePrincipal',
        fields : [ 'materia','aula','dia','inicio','fin','horas' ]
    });
    X.store({
        id     : 'storeDetalleReducido',
        fields : [ 'materia', 'horas', 'profesores','horasT' ]
    });

    X.store({
        id     : 'horariosStore',
        fields : [ 'dia','hora' ]
    });

    X.store({
        id     : 'storeFacultad',
        fields : [ 'idFacultad', 'nombre' ]
    });
    
    X.aStore({
        id     : 'diaStore',
        fields : [ 'idDia','nombre' ],
        data   : [ [1,'Lunes'],[2,'Martes'],[3,'Miércoles'],[4,'Jueves'],
        [5,'Viernes'],[6,'Sábado'],[7,'Domingo'] ]
    });

    X.grid.panel({
        id          : 'materiasPrincipalGrid',
        title       : 'Materias',
        collapsed   : true,
        height      : 200,
        width       : 625,
        storeId     : 'storeDetalleReducido',
        x           : 10,
        y           : 100,
        columns     :[
        X.grid.text  ({
            header: 'Materia',
            dataIndex: 'materia',
            width: 200,
            renderer: function(value){
                var storeL=X.get('storeMateria');
                var i=storeL.findExact('idCarreraMateria', value);
                var name=storeL.getAt(i).get('nombre');
                return name;
            }


        }),
        X.grid.text  ({
            header: 'Horas Acumuladas',
            dataIndex: 'horas',
            width:110
        }),
        X.grid.text  ({
            header: 'Horas Necesarias',
            dataIndex: 'horasT',
            width: 110
        }),
        X.grid.text  ({
            header: 'Cantidad de profesores',
            dataIndex: 'profesores',
            width: 110
        }),
        X.grid.edit  ({
            handler : h_editar
        }),
        X.grid.remove({
            handler : h_eliminar
        })
        ]
    });


    X.grid.editor({
        id          : 'responsablesPrincipalGrid',
        title       : 'Responsables',
        collapsed   : true,
        height      : 200,
        width       : 625,
        storeId     : 'storeResponsablePrincipal',
        x           : 10,
        y           : 350,

        columns     :[
        X.grid.text  ({
            header: 'Materia',
            dataIndex: 'materia',
            width: 300,
            renderer: function(value){
                var storeL=X.get('storeMateria');
                var i=storeL.findExact('idCarreraMateria', value);
                var name=storeL.getAt(i).get('nombre');
                return name;
            }
        }),
        X.grid.text  ({
            header: 'Profesor',
            dataIndex: 'profesor',
            width: 150,
            renderer: function(value){
                var storeL=X.get('storeProfesor');
                var i=storeL.findExact('idProfesor', value);
                var name=storeL.getAt(i).get('nombreCompleto');
		 // alert('valor que viene '+value+' valor que busca '+storeL.getAt(i).get('idProfesor')+' nombre del valor buscado'+name+' i '+i );
                return name;
            }
        }),
        X.grid.text  ({
            header: 'Categoría',
            dataIndex: 'categoria',
            width: 110,
            renderer: function(value){
                var storeL=X.get('storeCategoria');
                var i=storeL.findExact('idCategoria', value);
                var name=storeL.getAt(i).get('nombre');
                return name;
            }
        }),
        X.grid.text  ({
            header: 'Marca',
            dataIndex: 'marca',
            width: 55,
            renderer: function(value){
                var storeL=X.get('marcaStore');
                var i=storeL.findExact('idMarca', value);
                var name=storeL.getAt(i).get('nombre');
                return name;
            }
        })
            
        ]
    });
        
    X.form.panel({
        id     : 'loadHorarioForm',
        height : 600,
        width  : 675,
        items  : [
        X.form.hidden ({
            id:'editorRows'
        }),
        X.form.label  ({
            x:10,
            y:16,
            text:'Facultad:'
        }),
        X.form.label  ({
            x:380,
            y:16,
            text:'Año:'
        }),
        X.form.label  ({
            x:510,
            y:16,
            text:'Semestre del año:'
        }),
        X.form.label  ({
            x:10,
            y:46,
            text:'Carrera:'
        }),
        X.form.label  ({
            x:380,
            y:46,
            text:'Sección:'
        }),
        X.form.label  ({
            x:510,
            y:46,
            text:'Semestre:'
        }),
        X.form.combo  ({
            x:70,
            y:10,
            width:295,
            id:'facultad',
            dfield:'nombre',
            vfield:'idFacultad',
            storeId:'storeFacultad'
        }),
        X.form.combo  ({
            x:435,
            y:10,
            width:60,
            id:'anho',
            value: currYear,
            dfield:'years',
            vfield:'years',
            storeId:'yearStore'
        }),
        X.form.combo  ({
            x:610,
            y:10,
            width:45,
            id:'semestreanho',
            value: currSem,
            dfield:'yearSemester',
            vfield:'yearSemester',
            storeId:'yearSemStore'
        }),
        X.form.combo  ({
            x:70,
            y:40,
            width:295,
            id:'carrera',
            dfield:'nombre',
            vfield:'idCarrera',
            storeId:'storeCarrera'
        }),
        X.form.combo  ({
            x:435,
            y:40,
            width:60,
            id:'seccion',
            value: 'A',
            dfield:'seccion',
            vfield:'seccion',
            storeId:'secStore'
        }),
        X.form.combo  ({
            x:610,
            y:40,
            width:45,
            id:'semestre',
            dfield:'semesters',
            vfield:'semesters',
            storeId:'semStore'
        }),
        X.form.button ({
            x:575,
            y:70,
            width:80,
            id:'aceptar',
            text:'Aceptar'
        }),
        X.form.button ({
            x:485,
            y:70,
            width:80,
            id:'agregar',
            text:'Agregar',
            disabled: true
        }),
        X.form.button ({
            x:395,
            y:70,
            width:80,
            id:'cambiar',
            text:'Cambiar',
            disabled: true
        }),
        X.form.button ({
            x:575,
            y:560,
            width:80,
            id:'cargar',
            text:'Cargar',
            disabled: true
        }),
        X.get('materiasPrincipalGrid'),
        X.get('responsablesPrincipalGrid')
        ]
    });
    X.event.button('agregar', function(){
        X.get('materiasGrid').store.removeAll();
        X.get('responsablesGrid').store.removeAll();
        X.get('materiaWindow').show();
    });
    X.event.button('cambiar', function(){
        X.get('storeMateria').removeAll();
        X.get('storeDetalleReducido').removeAll();
        X.get('storeDetallePrincipal').removeAll();
        X.get('storeResponsablePrincipal').removeAll();
        X.get('facultad').enable();
        X.get('carrera').enable();
        X.get('anho').enable();
        X.get('seccion').enable();
        X.get('semestreanho').enable();
        X.get('semestre').enable();
        X.get('materiasPrincipalGrid').collapse();
        X.get('responsablesPrincipalGrid').collapse();
        X.get('cargar').disable();
        X.get('cambiar').disable();
        X.get('agregar').disable();
        X.get('aceptar').enable();
    });
    X.event.button('aceptar', function(){
        if (X.isempty('facultad'))
            X.msg.failure('Seleccione una "Facultad".', h_empty_facultad      );
        else if (X.isempty('carrera'))
            X.msg.failure('Seleccione una "Carrera".', h_empty_carrera        );
        else if (X.isempty('anho'))
            X.msg.failure('Seleccione un "Año".', h_empty_anho                );
        else if (X.isempty('seccion'))
            X.msg.failure('Seleccione una "Sección".', h_empty_seccion        );
        else if (X.isempty('semestreanho'))
            X.msg.failure('Seleccione un "Semestre del año".', h_empty_semanho);
        else if (X.isempty('semestre'))
            X.msg.failure('Seleccione un "Semestre".', h_empty_semestre       );
        else{
            X.ajax({
                url: '/horario/ajax-materias',
                params: {
                    semestre     : X.value('semestre'),
                    anho         : X.value('anho'),
                    semestreanho : X.value('semestreanho'),
                    seccion      : X.value('seccion'),
                    carrera      : X.value('carrera')
                },
                afterSuccess: h_obtener_success
            });

           
        }
    });
    
    X.event.button('cargar', function(){
    
        var storeM = X.get('storeDetallePrincipal');
        var storeR = X.get('storeResponsablePrincipal');
        var rowCountM = storeM.getCount();
        var rowCountR = storeR.getCount();
        var gridM= X.get('materiasPrincipalGrid')
        var gridR= X.get('responsablesPrincipalGrid')
    
        if (rowCountM<=0){
            X.msg.failure('Debe insertar al menos una materia');
        }
        else{
               
            var i=0;
            //            grid.getSelectionModel().selectAll();
            //            var sm = grid.getSelectionModel().getSelections();
           
            var detalles = new Array();
            var responsables = new Array();
            var detalleR = new Array();
            for (i=0; i<storeM.getCount(); i++) {
                var data = {
                    materia:'',
                    aula:'',
                    dia:'',
                    inicio:'',
                    fin:'',
                    horas:''
                };
                data.materia=storeM.getAt(i).get('materia');
                if(storeM.getAt(i).get('aula')){
                    data.aula=storeM.getAt(i).get('aula');
                }else{
                    data.aula='';
                }
                data.dia=storeM.getAt(i).get('dia');
                data.inicio=storeM.getAt(i).get('inicio');
                data.fin=storeM.getAt(i).get('fin');
                data.horas=storeM.getAt(i).get('horas');
                detalles.push(data);
                delete data;
                data = {};
            }

            for (i=0; i<storeR.getCount(); i++) {
                data = {
                    materia:'',
                    profesor:'',
                    categoria:'',
                    marca:''
                };
                data.materia=storeR.getAt(i).get('materia');
                data.profesor=storeR.getAt(i).get('profesor');
                data.categoria=storeR.getAt(i).get('categoria');
                data.marca=storeR.getAt(i).get('marca');
                responsables.push(data);
                delete data;
                data = {};
            }

            for (i=0; i<gridM.store.getCount(); i++) {
                data = {
                    materia:'',
                    horas:'',
                    profesores:''

                };
                data.materia=gridM.store.getAt(i).get('materia');
                data.horas=gridM.store.getAt(i).get('hoas');
                data.profesores=gridM.store.getAt(i).get('profesores');
                detalleR.push(data);
                delete data;
                data = {};
            }
	    for(i=0;i<gridM.store.getCount();i++){
		  
                var materiaID=gridM.store.getAt(i).get('materia');
		  var storeL=X.get('storeMateria');
                var z=storeL.find('idCarreraMateria', materiaID);
		  		
                var name=storeL.getAt(z).get('nombre');
                var horas=storeL.getAt(z).get('horasCatedra');
		  if(horas!=gridM.store.getAt(i).get('horas')){
                    X.msg.failure('La cantidad de horas de la materia:'+name+' no coincide',h_horasfailure);return;
                }
            }

            X.ajax({
                url: '/horario/ajax-cargar',
                params: {
                    semestre     : X.value('semestre'),
                    anho         : X.value('anho'),
                    semestreanho : X.value('semestreanho'),
                    seccion      : X.value('seccion'),
                    carrera      : X.value('carrera'),
                    detalles     : Ext.encode(detalles),
                    responsables : Ext.encode(responsables),
                    detalleR : Ext.encode(detalleR)
                },

                afterSuccess: h_cargar_success
            });
        }
    });

    X.win.panel({
        id       : 'creaWindow',
        title    : 'Carga de horario',
        modal    : false,
        items    : X.get('loadHorarioForm')
    });

    X.get('creaWindow').show();

});

